CC     = gcc.exe
LINK   = ld.exe
ARCH   = ar.exe
INCDIR = $(DJGPP_UNX)/INCLUDE
LIBDIR = $(DJGPP_UNX)/LIB
OBJS   = $(LIBDIR)/crt0.o
LIBS   = -lgcc -lc -lgcc
DEF2   = -D___X86 -D___IO -D___32bit -D___DOS -D___DJGPP \
	 -D___KeyInt
CFLG2  = -c -funsigned-char -ffast-math -O2 -Wall -I. -I$(INCDIR)
LFLG2  = -L$(LIBDIR) $(OBJS)

BIN    = ../bin
DEST   = $(BIN)/$(VAR)

#==========================================================================

LIB_OBJS_1 = sys/dos/_main.o \
	     sys/dos/_std.o \
	     sys/dos/_kbd.o \
	     sys/dos/_disp.o \
	     sys/dos/_graph.o \
	     sys/dos/_graph2.o \
	     sys/std.o
LIB_OBJS_2 = sys/memo.o \
	     sys/kbd.o \
	     sys/disp.o \
	     sys/graph.o \
	     sys/font.o \
	     sys/cons.o
LIB_OBJS_3 = sys/file.o \
	     sys/tim.o \
	     sys/mice.o \
	     sys/real.o \
	     sys/sig.o \
	     lib/str.o \
	     lib/num.o
LIB_OBJS   = $(LIB_OBJS_1) $(LIB_OBJS_2) $(LIB_OBJS_3)

DIO_OBJS_1 = main/dio.o \
	     eval/eval.o \
	     eval/cmd.o \
	     eval/arit.o \
	     eval/efpu.o \
	     vp/vp.o
DIO_OBJS_2 = vp/opfn.o \
	     vp/vfpu.o \
	     vp/sys.o \
	     vp/lib.o
DIO_OBJS   = $(DIO_OBJS_1) $(DIO_OBJS_2)

#==========================================================================

.c.o:
	$(CC) -o $@ $< @dio_c.cfg

#==========================================================================

all: $(DEST)/libdio.a $(DEST)/dio.exe $(DEST)/gmod.exe

#==========================================================================

$(BIN)/print.exe: misc/print.c
	$(CC) -o misc/print.o $< $(CFLG2) -s
	$(LINK) -o $@ $(LFLG2) misc/print.o $(LIBS) -s

dio_c.cfg: $(BIN)/print.exe
	$(BIN)/print.exe $(CFLG2) $(CFLG) >dio_c.cfg
	$(BIN)/print.exe $(DEF2) $(DEF) >>dio_c.cfg

dio_l.cfg: $(BIN)/print.exe
	$(BIN)/print.exe $(LFLG2) $(LFLG) >dio_l.cfg

libs.lst: $(BIN)/print.exe
	$(BIN)/print.exe $(LIBS) >libs.lst

dlibs.lst: $(BIN)/print.exe
	$(BIN)/print.exe $(DEST)/libdio.a >dlibs.lst
	$(BIN)/print.exe $(LIBS) >>dlibs.lst

lib.lst: $(BIN)/print.exe
	$(BIN)/print.exe $(LIB_OBJS_1) >lib.lst
	$(BIN)/print.exe $(LIB_OBJS_2) >>lib.lst
	$(BIN)/print.exe $(LIB_OBJS_3) >>lib.lst

dio.lst: $(BIN)/print.exe
	$(BIN)/print.exe $(DIO_OBJS_1) >dio.lst
	$(BIN)/print.exe $(DIO_OBJS_2) >>dio.lst

#==========================================================================

$(DEST)/libdio.a: dio_c.cfg lib.lst $(LIB_OBJS)
	$(ARCH) -r $@ @lib.lst

$(DEST)/dio.exe: dio_c.cfg dio_l.cfg dio.lst dlibs.lst \
		 $(DIO_OBJS) $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg @dio.lst @dlibs.lst

$(DEST)/gmod.exe: dio_c.cfg dio_l.cfg dlibs.lst \
		  test/gmod.o $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg test/gmod.o @dlibs.lst

$(DEST)/tkey.exe: dio_c.cfg dio_l.cfg dlibs.lst \
		  test/tkey.o $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg test/tkey.o @dlibs.lst

$(DEST)/gkey.exe: dio_c.cfg dio_l.cfg dlibs.lst \
		  test/gkey.o $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg test/gkey.o @dlibs.lst

$(DEST)/mkey.exe: dio_c.cfg dio_l.cfg dlibs.lst \
		  test/mkey.o $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg test/mkey.o @dlibs.lst

$(DEST)/mchr.exe: dio_c.cfg dio_l.cfg dlibs.lst \
		  test/mchr.o $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg test/mchr.o @dlibs.lst

$(DEST)/vdb.exe: dio_c.cfg dio_l.cfg dlibs.lst \
		 test/vdb.o $(DEST)/libdio.a
	$(LINK) -o $@ @dio_l.cfg test/vdb.o @dlibs.lst

#==========================================================================

sys/asc0816.h: $(BIN)/b2c.exe $(BIN)/asc0816.fnt
	../bin/b2c.exe ..\\bin\\asc0816.fnt sys\\asc0816.h N1 Fnt_asc0816[]

$(BIN)/b2c.exe: dio_c.cfg dio_l.cfg libs.lst misc/b2c.o
	$(LINK) -o $@ @dio_l.cfg misc/b2c.o @libs.lst

#==========================================================================
